package com.qfedu.entity.course02;

/**
 *
 */
public class LinkedQueue<E> {
    /**
     * 头节点
     */
    LQNode head;
    /**
     * 尾节点
     */
    LQNode tail;

    public LinkedQueue() {
        //创建空的头节点
        LQNode<E> node = new LQNode<>();
        node.next = null;
        head = tail = node;
    }

    public void enQueue(E e) {
        //创建新节点
        LQNode node = new LQNode();
        node.data = e;
        node.next = null;
        //原尾节点后链接新节点
        tail.next = node;
        //尾节点指针改为指向新节点
        tail = node;
    }

    public E removeQueue() {
        if (head == tail) {
            //队列为空
            return null;
        }
        //队首节点
        LQNode<E> node = head.next;
        E e = node.data;
        //头指针后移，指向新队首结点
        head.next = node.next;
        //如果删除的刚好是尾节点，则需要将尾节点指向头节点
        if (tail == node) {
            tail = head;
        }
        return e;
    }

    public static class LQNode<E> {
        E data;
        LQNode next;
    }
}
